/******************************************************************************* 
  Copyright (C), 1988-2020, zeno Tech. Co., Ltd.
  Description:   VIN模块  
  Function List:     
  History:
    <wangmc -- 2014-09-26>  创建
*******************************************************************************/ 

/*=============================================================================
                                 Includes                                  
 =============================================================================*/
#include "videoPriv.h"

/*=============================================================================
                               Macro Definition
 =============================================================================*/

/*=============================================================================
                        Local Structures and Typedef 
 =============================================================================*/

/*=============================================================================
                             Extern Variables                                  
=============================================================================*/

/*=============================================================================
                             Local Variables                                  
 =============================================================================*/
/*=============================================================================
                             Function Definition                                  
 =============================================================================*/
/*******************************************************************************
  Function:     VI_RkEnableChn
  Description:  创建并使能VI Channel
  Input:        - viPipe: VI PIPE 编号
                - viChn: VI Channel 编号
                - pstChnAttr: VI 通道的属性  
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int VI_RkEnableChn(VI_PIPE viPipe, VI_CHN viChn, const VI_CHN_ATTR_S *pstChnAttr)
{
    int s32Ret;

    if (videoCtl_g.vpsChnState & (0x1 << viChn))
    {
        LOG_PrintWarn("vi chn(%d) is invalid.\n", viChn);
        return 0;
    }

    s32Ret = RK_MPI_VI_SetChnAttr(viPipe, viChn, pstChnAttr);
    if (s32Ret) 
    {
        LOG_PrintError("Fail to RK_MPI_VI_SetChnAttr(pipe:%d,chn:%d) with s32Ret=%d\n", 
                        viPipe, viChn, s32Ret);
        return -1;
    }
    
    s32Ret = RK_MPI_VI_EnableChn(viPipe, viChn);
    if (s32Ret) 
    {
        LOG_PrintError("Fail to RK_MPI_VI_EnableChn(pipe:%d,chn:%d) with s32Ret=%d\n", 
                        viPipe, viChn, s32Ret);
        return -1;
    }

    videoCtl_g.vpsChnState |= (0x1 << viChn);

    return 0;
}


/*******************************************************************************
  Function:     VI_RkDisableChn
  Description:  关闭VI Channel
  Input:        - viPipe: VI PIPE 编号
                - viChn: VI Channel 编号
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int VI_RkDisableChn(VI_PIPE viPipe, VI_CHN viChn)
{
    int s32Ret;

    if ((videoCtl_g.vpsChnState & (0x1 << viChn)) == 0)
    {
        LOG_PrintWarn("vi chn(%d) is invalid.\n", viChn);
        return 0;
    }

    s32Ret = RK_MPI_VI_DisableChn(viPipe, viChn);
    if (s32Ret)
    {
        LOG_PrintError("Fail to RK_MPI_VI_DisableChn(pipe:%d,chn:%d) with s32Ret=%d\n", 
                        viPipe, viChn, s32Ret);
        return -1;
    }

    videoCtl_g.vpsChnState &= (~(0x1 << viChn));

    return 0;
}

